Fractale Tree  0.5
Plot Tree Fractale
main_fenetre.cpp
Go to the documentation of this file.
1 #include "main_fenetre.h"
2 
3 
4 Main_fenetre::Main_fenetre(QWidget *parent) :
5  QMainWindow(parent)
6 {
7  Current_Update=true;
8  qDebug() << "Etape 1.0";
9  //Init widget
10  QWidget *widget = new QWidget;
11  setCentralWidget(widget);
12 
13  //setWindowIcon(QIcon("Icone.ico"));
14  setWindowTitle("Fractale Tree");
15  qDebug() << "Etape 2.0";
16  // QWidget_trees
21  QObject::connect(Widget_trees,SIGNAL(Value_changed()),this,SLOT(Plot_tree()));
22 
23  // Widget_Config
25  QObject::connect(Widget_Config,SIGNAL(Value_changed()),this,SLOT(Plot_tree()));
26 
27  // Widget_Ratio
29  QObject::connect(Widget_Ratio,SIGNAL(Value_changed()),this,SLOT(Plot_tree()));
30 
31  // Widget_Graphique
33  QObject::connect(Widget_Graphique,SIGNAL(Value_changed()),this,SLOT(Plot_tree()));
34 
35  // HBoxLayout
36  HBoxLayout = new QHBoxLayout();
37  HBoxLayout->addWidget(Widget_trees);
38  HBoxLayout->addWidget(Widget_Config);
39  HBoxLayout->addWidget(Widget_Ratio);
40  HBoxLayout->addWidget(Widget_Graphique);
41  qDebug() << "Etape 3.0";
42  // Graphique
43  //Init
44  GraphicsView= new QGraphicsView();
45  scene= new QGraphicsScene();
46  GraphicsView->setScene(scene);
47 
48  PushButton_Zoom_P = new QPushButton("Zoom +");
49  PushButton_Zoom_M = new QPushButton("Zoom -");
50  //Layout_Zoom
51  Layout_Zoom = new QHBoxLayout();
52  Layout_Zoom->addWidget(PushButton_Zoom_P);
53  Layout_Zoom->addWidget(PushButton_Zoom_M);
54  qDebug() << "Etape 3.5";
55  //Bar
56  ProgressBar_Plot= new QProgressBar();
57  ProgressBar_Plot->setMaximum(100);
58  ProgressBar_Plot->setMinimum(0);
59  ProgressBar_Plot->setValue(100);
60 
61  qDebug() << "Etape 4.0";
62  //VBoxLayout
63  VBoxLayout = new QVBoxLayout();
64  VBoxLayout->addLayout(HBoxLayout);
65  VBoxLayout->addWidget(GraphicsView,6);
66  VBoxLayout->addLayout(Layout_Zoom);
67  VBoxLayout->addWidget(ProgressBar_Plot);
68 
69  // TextBrowser
70  TextBrowser= new QTextBrowser();
71  TextBrowser->setSource(QUrl("Aide.html"));
72  TextBrowser->hide();
73  // HBoxLayout_all
74  HBoxLayout_all = new QHBoxLayout();
75  HBoxLayout_all->addLayout(VBoxLayout);
76  HBoxLayout_all->addWidget(TextBrowser);
77 
78  // setLayout
79  widget->setLayout(HBoxLayout_all);
80  qDebug() << "Etape 5.0";
81  //SLOT
82  QObject::connect(PushButton_Zoom_M,SIGNAL(clicked(bool)),this,SLOT(Zoom_M()));
83  QObject::connect(PushButton_Zoom_P,SIGNAL(clicked(bool)),this,SLOT(Zoom_P()));
84  qDebug() << "Etape 6.0";
85  // draw_Tree
87  qDebug() << "Etape 7.0";
88  //Plot_tree()
89  Plot_tree();
90  qDebug() << "Etape 8.0";
91  createActions();
92  createMenus();
93 }
95 {
96  GraphicsView->scale(0.75,0.75);
97 }
98 
100 {
101  GraphicsView->scale(1.25,1.25);
102 }
103 
105 {
106  if(Current_Update)
107  {
108  //scene= new QGraphicsScene();
110  }
111  //draw_Tree.Save_file_svg("temp.svg");
112 }
114 {
115  // Fichier
116  newAct = new QAction(tr("&Nouveau"), this);
117  newAct->setShortcuts(QKeySequence::New);
118  newAct->setStatusTip(tr("Créer un nouveau fichier"));
119  connect(newAct, &QAction::triggered, this, &Main_fenetre::newFile);
120  openAct= new QAction(tr("&Ouvrir"), this);
121  openAct->setShortcuts(QKeySequence::Open);
122  openAct->setStatusTip(tr("Ouvrir un fichier"));
123  connect(openAct, &QAction::triggered, this, &Main_fenetre::open);
124  saveAct= new QAction(tr("&Sauvegarder"), this);
125  saveAct->setShortcuts(QKeySequence::Save);
126  saveAct->setStatusTip(tr("Sauvegarder un fichier"));
127  connect(saveAct, &QAction::triggered, this, &Main_fenetre::save);
128  saveAct_SVG= new QAction(tr("S&auvegarder en svg"), this);
129  saveAct_SVG->setShortcuts(QKeySequence::SaveAs);
130  saveAct_SVG->setStatusTip(tr("Saauvegarder le fichier en svg"));
131  connect(saveAct_SVG, &QAction::triggered, this, &Main_fenetre::save_svg);
132  //A Propos
133  presentation_dev_Act= new QAction(tr("A propos du &developeur"),this);
134  presentation_dev_Act->setStatusTip(tr("A propos du developeur"));
135  connect(presentation_dev_Act, &QAction::triggered, this, &Main_fenetre::Presentation_dev_Box);
136  presentation_prog_Act= new QAction(tr("A propos du &programme"),this);
137  presentation_prog_Act->setStatusTip(tr("A propos du programme"));
138  connect(presentation_prog_Act, &QAction::triggered, this, &Main_fenetre::Presentation_prog_Box);
139  aide_Act= new QAction(tr("&Aide"),this);
140  aide_Act->setStatusTip(tr("Aide du programme"));
141  connect(aide_Act, &QAction::triggered, this, &Main_fenetre::Aide_Box);
142  // Exemples
143  exemple_base_Act=new QAction(tr("&Base"),this);
144  exemple_base_Act->setStatusTip(tr("Exemple de base"));
145  connect(exemple_base_Act, &QAction::triggered, this, &Main_fenetre::exemple_base);
146  // Arbre de Pythagore rectanculaire
147  //Forme complexe
148  exemple_Recabre_formecmplx_hypercube_Act=new QAction(tr("&HyperCube"),this);
150  exemple_Recabre_formecmplx_logo_Act=new QAction(tr("&Logo"),this);
152  // Arbre reel
153  exemple_Recabre_Reel_symetrie_Act=new QAction(tr("Arbre &Symetrique"),this);
155  exemple_Recabre_Reel_disymetrie_Act=new QAction(tr("Arbre &Dissymétrique"),this);
157  // Arbre de Pythagore Carre
158  // Arbre Symetrique
159  exemple_Pyabre_symetrie_Mono_SansB_Act=new QAction(tr("Arbre rouge sans arrondi"),this);
161  exemple_Pyabre_symetrie_Mono_AvecB_Act=new QAction(tr("Arbre rouge avec arrondi"),this);
163  exemple_Pyabre_symetrie_Auto_SansB_Act=new QAction(tr("Arbre multi-color sans arrondi"),this);
165  exemple_Pyabre_symetrie_Auto_AvecB_Act=new QAction(tr("Arbre multi-color avec arrondi"),this);
167  // Arbre Dissymetrique faible;
168  exemple_Pyabre_disymetrielow_Mono_SansB_Act=new QAction(tr("Arbre rouge sans arrondi"),this);
170  exemple_Pyabre_disymetrielow_Mono_AvecB_Act=new QAction(tr("Arbre rouge avec arrondi"),this);
172  // Arbre Dissymetrique Forte;
173  exemple_Pyabre_disymetriemax_Auto_SansB_Act=new QAction(tr("Arbre multi-color sans arrondi"),this);
175  exemple_Pyabre_disymetriemax_Auto_AvecB_Act=new QAction(tr("Arbre multi-color avec arrondi"),this);
177 
178 
179  }
181 {
182  QMenuBar *menuBar_rh=new QMenuBar(0);
183  fileMenu=menuBar_rh->addMenu(tr("&Fichier"));
184  fileMenu->addAction(newAct);
185  fileMenu->addAction(openAct);
186  fileMenu->addAction(saveAct);
187  fileMenu->addAction(saveAct_SVG);
188  // Menu Exemples
189  exempleMenu=menuBar_rh->addMenu(tr("&Exemples"));
190  exempleMenu->addAction(exemple_base_Act);
191  // Sub-menu Arbre carre
192  exemple_Pyabre_symetrie_Group=exempleMenu->addMenu(tr("Arbres Carres &Symetrique"));
197  // Sub-sub-menu Arbre dissymetrique faible
198  exemple_Pyabre_disymetrielow_Group=exempleMenu->addMenu(tr("Arbres Carrés Dissymetriques F&aibles"));
201  // Sub-sub-menu Arbre dissymetrique forte
202  exemple_Pyabre_disymetriemax_Group=exempleMenu->addMenu(tr("Arbres Carrés Dissymetriques F&ortes"));
205  // Sub-sub-menu Arbre naturel
206  exemple_Recabre_Reel_Group=exempleMenu->addMenu(tr("Arbres Rectangulaire &Naturels"));
209  // Sub-sub-menu formes complexes
210  exemple_Recabre_formecmplx_Group=exempleMenu->addMenu(tr("Formes Rectangulaire &Complexes"));
213 
214 
215  aproposMenu=menuBar_rh->addMenu(tr("&?"));
216  aproposMenu->addAction(aide_Act);
217  aproposMenu->addAction(presentation_dev_Act);
219 
220  setMenuBar(menuBar_rh);
221 }
223 {
224  Open_file("new.datatree");
225 }
226 
228 {
229  QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "data (*.datatree)");
230  QMessageBox::about(this,"Namefile",fichier);
231  if(!fichier.isEmpty())
232  Open_file(fichier);
233  //Open_file(fichier);
234 }
236 {
237  QString fichier = QFileDialog::getSaveFileName(this, "Enregistrer un fichier sous le format SVG", QString(), "svg (*.svg)");
238  QMessageBox::about(this,"Namefile",fichier);
239  if(!fichier.isEmpty())
240  {
241  Plot_tree();
242  draw_Tree.Save_file_svg("fichier");
243  }
244 
245  //Widget_Plot->Save_As_SVG(fichier);
246 }
247 
249 {
250  QString fichier = QFileDialog::getSaveFileName(this, "Enregistrer un fichier", QString(), "data (*.datatree)");
251  QMessageBox::about(this,"Namefile",fichier);
252  if(!fichier.isEmpty())
253  Save_file(fichier);
254 }
255 
257 {
258  QMessageBox::about(this, "A propos du développeur",
259  "Développeur en C++, python, PHP et JavaScript, je suis passionné par la programmation et les mathématiques, notamment les fractales. Mes autres passions sont la photo et les panoramas à 360°.:\n" \
260  "Mes sites internet sont :\n" \
261  "> CV Mécatronique : http://www.renaud-henry.fr \n" \
262  "> Galerie photo : http://piwigo.rhenry.fr \n" \
263  "> Portfolio Photo : http://photo.rhenry.fr \n" \
264  "> Panoramas : http://pano.rhenry.fr \n" \
265  "> Visite virtuelle : http://visite-virtuel.rhenry.fr");
266 }
268 {
269  QMessageBox::about(this, "A propos du programme",
270  "Nom du programme : Fractale Tree \n" \
271  "Version : 0.5 \n" \
272  "Date : 30 juin 2016 \n" \
273  "Développeur : Renaud HENRY \n" \
274  "Site web : http://fratale.rhenry.fr (en cours de construction) \n" \
275  "Email : fratale@rhenry.fr");
276 }
278 {
279  if(TextBrowser->isHidden())
280  {
281  TextBrowser->show();
282  }
283  else
284  {
285  TextBrowser->hide();
286  }
287 }
288 
289 
290 void Main_fenetre::Save_file(QString fichier)
291 {
292  QColor color;
293  QFile file(fichier);
294  if (file.open(QIODevice::WriteOnly))
295  {
296  QDataStream out(&file);
297  //Version
298  out << 1;
299  //Trees :
301  for(int i=0;i<Widget_trees->Get_Nb_Widget_tree();i++)
302  {
303  out << Widget_trees->Get_Value_By_Index(i);
304  }
305 
306  //Config
307  out << Widget_Config->Get_Lenght();
308  out << Widget_Config->Get_Niveau();
309  out << Widget_Config->Get_SizePen();
310 
311  // Ration
312  out << Widget_Ratio->Get_Ratio();
313  out << Widget_Ratio->isChecked();
314 
315  //Graphique
316  color=Widget_Graphique->Get_Color();
317  out << color.red();
318  out << color.green();
319  out << color.blue();
322 
323  file.close();
324  }
325 }
326 void Main_fenetre::Open_file(QString fichier)
327 {
328  Current_Update=false;
329  int r,g,b,nb_ligne,Version;
330  double d;
331  bool bo;
332  QColor color;
333 
334  QFile file(fichier);
335 
336  if (file.open(QIODevice::ReadOnly))
337  {
338  QDataStream in(&file);
339 
340  //Widget_trees
341  in >> Version;
342  if(Version==10)
343  {
344  nb_ligne=Version;
345  for(int i=0;i<nb_ligne;i++)
346  {
347  in >> r;
349  }
350 
351  //Config
352  in >> d;
354  in >> r;
356  in >> d;
358 
359  //Ration
360  Widget_Ratio->Set_Checked(true);
361  in >> d;
363  in >> bo;
365 
366  //Graphique
367  in >> r;
368  in >> g;
369  in >> b;
370  color.setRgb(r,g,b);
371  Widget_Graphique->Set_Color(color);
372  in >> bo;
374  in >> bo;
376  }
377  else if (Version==1)
378  {
379  in >> nb_ligne;
380  for(int i=0;i<nb_ligne;i++)
381  {
382  in >> r;
384  }
385 
386  //Config
387  in >> d;
389  in >> r;
391  in >> d;
393 
394  //Ration
395  Widget_Ratio->Set_Checked(true);
396  in >> d;
398  in >> bo;
400 
401  //Graphique
402  in >> r;
403  in >> g;
404  in >> b;
405  color.setRgb(r,g,b);
406  Widget_Graphique->Set_Color(color);
407  in >> bo;
409  in >> bo;
411  }
412 
413  file.close();
414 
415  }
416  Current_Update=true;
417  Plot_tree();
418  Zoom_M();
419  Zoom_P();
420 }
421 
423 {
424  Open_file("exemples/000_exemple_base_Act.datatree");
425 }
426 
428 {
429  Open_file("exemples/022_exemple_Pyabre_disymetrielow_Mono_AvecB_Act.datatree");
430 
431 }
432 
434 {
435  Open_file("exemples/021_exemple_Pyabre_disymetrielow_Mono_SansB_Act.datatree");
436 
437 
438 }
440 {
441  Open_file("exemples/032_exemple_Pyabre_disymetriemax_Auto_AvecB_Act.datatree");
442 
443 
444 }
446 {
447  Open_file("exemples/031_exemple_Pyabre_disymetriemax_Auto_SansB_Act.datatree");
448 
449 
450 }
452 {
453  Open_file("exemples/014_exemple_Pyabre_symetrie_Auto_AvecB_Act.datatree");
454 
455 
456 }
458 {
459  Open_file("exemples/013_exemple_Pyabre_symetrie_Auto_SansB_Act.datatree");
460 
461 }
463 {
464  Open_file("exemples/012_exemple_Pyabre_symetrie_Mono_AvecB_Act.datatree");
465 
466 }
468 {
469  Open_file("exemples/011_exemple_Pyabre_symetrie_Mono_SansB_Act.datatree");
470 
471 }
472 
474 {
475  Open_file("exemples/051_exemple_Recabre_formecmplx_hypercube_Act.datatree");
476 
477 }
479 {
480  Open_file("exemples/052_exemple_Recabre_formecmplx_logo_Act.datatree");
481 
482 }
484 {
485  Open_file("exemples/042_exemple_Recabre_Reel_disymetrie_Act.datatree");
486 
487 }
489 {
490  Open_file("exemples/041_exemple_Recabre_Reel_symetrie_Act.datatree");
491 
492 }
QPushButton * PushButton_Zoom_P
Definition: main_fenetre.h:59
QAction * exemple_Pyabre_disymetrielow_Mono_SansB_Act
Definition: main_fenetre.h:94
QProgressBar * ProgressBar_Plot
Definition: main_fenetre.h:110
Main_fenetre(QWidget *parent=0)
Definition: main_fenetre.cpp:4
void createMenus()
QHBoxLayout * HBoxLayout_all
Definition: main_fenetre.h:108
QGraphicsScene * scene
Definition: main_fenetre.h:56
QAction * exemple_Recabre_formecmplx_logo_Act
Definition: main_fenetre.h:83
QVBoxLayout * VBoxLayout
Definition: main_fenetre.h:51
void Set_Color_Auto(bool etat)
void Set_Niveau(int niveau)
void exemple_Pyabre_symetrie_Auto_SansB()
QAction * exemple_Recabre_Reel_disymetrie_Act
Definition: main_fenetre.h:86
double Get_SizePen()
QAction * exemple_Pyabre_disymetriemax_Auto_SansB_Act
Definition: main_fenetre.h:97
QWidget_Graphique * Widget_Graphique
Definition: main_fenetre.h:70
void exemple_Pyabre_disymetrielow_Mono_AvecB()
void exemple_Recabre_formecmplx_hypercube()
QTextBrowser * TextBrowser
Definition: main_fenetre.h:107
QAction * exemple_Recabre_formecmplx_hypercube_Act
Definition: main_fenetre.h:82
QAction * exemple_Pyabre_symetrie_Auto_AvecB_Act
Definition: main_fenetre.h:92
QWidget_Config * Widget_Config
Definition: main_fenetre.h:66
int Get_Nb_Widget_tree()
QAction * exemple_Pyabre_symetrie_Mono_AvecB_Act
Definition: main_fenetre.h:90
QWidget_trees * Widget_trees
Definition: main_fenetre.h:53
void exemple_Recabre_Reel_symetrie()
QHBoxLayout * Layout_Zoom
Definition: main_fenetre.h:58
void Set_SizePen(double sizePen)
QMenu * exemple_Recabre_formecmplx_Group
Definition: main_fenetre.h:81
QMenu * aproposMenu
Definition: main_fenetre.h:100
void exemple_base()
int Get_Value_By_Index(int index)
void exemple_Recabre_formecmplx_logo()
QAction * exemple_Pyabre_symetrie_Auto_SansB_Act
Definition: main_fenetre.h:91
void Save_file(QString fichier)
QGraphicsView * GraphicsView
Definition: main_fenetre.h:55
void Set_with_Bout(bool etat)
void Set_Lenght(double lenght)
QAction * exemple_Pyabre_disymetrielow_Mono_AvecB_Act
Definition: main_fenetre.h:95
void exemple_Recabre_Reel_disymetrie()
QMenu * fileMenu
Definition: main_fenetre.h:72
void Open_file(QString fichier)
QAction * newAct
Definition: main_fenetre.h:73
QHBoxLayout * HBoxLayout
Definition: main_fenetre.h:64
void exemple_Pyabre_symetrie_Mono_SansB()
QMenu * exemple_Pyabre_disymetriemax_Group
Definition: main_fenetre.h:96
void Set_Checked(bool etat)
QMenu * exemple_Pyabre_symetrie_Group
Definition: main_fenetre.h:88
void exemple_Pyabre_symetrie_Auto_AvecB()
QMenu * exempleMenu
Definition: main_fenetre.h:78
void exemple_Pyabre_disymetriemax_Auto_AvecB()
void Set_Ratio(double ratio)
void createActions()
void Plot(QWidget_trees *Widget_trees, QWidget_Config *Widget_Config, QWidget_Ratio *Widget_Ratio, QWidget_Graphique *Widget_Graphique)
Desiner l&#39;arbre.
Definition: draw_tree.cpp:107
Affichage principal.
void exemple_Pyabre_disymetrielow_Mono_SansB()
void Presentation_prog_Box()
void Set_Color(QColor color)
QMenu * exemple_Pyabre_disymetrielow_Group
Definition: main_fenetre.h:93
void exemple_Pyabre_symetrie_Mono_AvecB()
void Save_file_svg(QString namefile)
Cree un fichier SVG.
Definition: draw_tree.cpp:28
Draw_Tree draw_Tree
Definition: main_fenetre.h:62
QAction * aide_Act
Definition: main_fenetre.h:103
void Presentation_dev_Box()
QAction * saveAct_SVG
Definition: main_fenetre.h:76
QWidget_Ratio * Widget_Ratio
Definition: main_fenetre.h:68
QAction * presentation_prog_Act
Definition: main_fenetre.h:102
QAction * exemple_Recabre_Reel_symetrie_Act
Definition: main_fenetre.h:85
QAction * exemple_base_Act
Definition: main_fenetre.h:79
QAction * exemple_Pyabre_disymetriemax_Auto_AvecB_Act
Definition: main_fenetre.h:98
QMenu * exemple_Recabre_Reel_Group
Definition: main_fenetre.h:84
bool Current_Update
Definition: main_fenetre.h:105
Widget de configuration d&#39;affichage des niveaus des branches.
QAction * saveAct
Definition: main_fenetre.h:75
double Get_Ratio()
QAction * exemple_Pyabre_symetrie_Mono_SansB_Act
Definition: main_fenetre.h:89
void Init(QGraphicsScene *scene, QProgressBar *ProgressBar_Plot)
Initialise la class.
Definition: draw_tree.cpp:66
QAction * presentation_dev_Act
Definition: main_fenetre.h:101
QAction * openAct
Definition: main_fenetre.h:74
void Set_Value_By_Index(int index, int value)
void exemple_Pyabre_disymetriemax_Auto_SansB()
QPushButton * PushButton_Zoom_M
Definition: main_fenetre.h:60